package cn.tm.ms.nerver.ft.route;


public interface IRoute<SEND, RECV> {
	
	/**
	 * 是否开启Mock服务
	 * 
	 * @return
	 */
	boolean isMock();

	/**
	 * Mock放通服务
	 * 
	 * @param send
	 * @return
	 * @throws Throwable
	 */
	RECV mock(SEND send) throws Throwable;
	
	/**
	 * 远程调度
	 * 
	 * @param send
	 * @return
	 * @throws Throwable
	 */
	RECV route(SEND send) throws Throwable;
	
	/**
	 * 重试休眠周期计算方式
	 * 
	 * @param times 当前已重试次数
	 * @param maxRetryNum 最大重试次数,-1表示无限重试
	 * @param x 休眠基数(毫秒)
	 * @param timestamp 时间戳
	 * @return
	 */
	long fx(int times, int maxRetryNum,long x, long timestamp);
	
}
